package net.tv90.bfmccore.helper;

import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class InventoryHelper {

    /*
    获取玩家背包内全部物品
    */
    public static List<ItemStack> getAllItems(Inventory inv) {
        List<ItemStack> itemStack = new ArrayList<>();
        for (int i = 0; i < inv.getSize(); i++) {
            if (!inv.getItem(i).getType().equals(Material.AIR))
                itemStack.add(inv.getItem(i));
        }
        return itemStack;
    }

    /*
    判断玩家背包内是否有指定itemStack
    */
    public static boolean hasItemStack(Inventory inv, ItemStack isk) {
        for (int i = 0; i < inv.getSize(); i++) {
            if (inv.getItem(i) == isk) {
                return true;
            }
        }
        return false;
    }

    /*
    判断玩家背包内是否有指定英文id的物品
    如果有，返回含有该物品的一个ItemStack,数量为1
    如果没有，返回一个空ItemStack
    */
    public static ItemStack hasItemToStack(Inventory inv, Material id) {
        ItemStack air = new ItemStack(Material.AIR);
        for (ItemStack isk : inv) {
            if (isk == null) {
                continue;
            }
            if (isk.getType().name().equals(id.toString())) {
                return isk;
            }
        }
        return air;
    }

    /*
    判断玩家背包内是否有指定英文id的物品
    */
    public static boolean hasItem(Inventory inv, Material id) {
        ItemStack isk = new ItemStack(id);
        for (int i = 0; i < inv.getSize(); i++) {
            if (inv.getItem(i).getType().name().equals(isk.getType().name())) {
                return true;
            }
        }
        return false;
    }

    /*
    在特定背包格子给予玩家某项物品
    <物品栏，英文id，数量，背包格子id>
    */
    public static void addItemIndex(Inventory inv, Material id, Integer amount, Integer index) {
        ItemStack isk = new ItemStack(id, amount);
        inv.setItem(index, isk);
    }

    /*
    直接给予玩家某项物品
    <物品栏，英文id，数量>
    */
    public static void addItem(Inventory inv, Material id, Integer amount) {
        ItemStack isk = new ItemStack(id, amount);
        inv.addItem(isk);
    }

    /*
    删除玩家某项物品
    <物品栏，英文id>
    */
    public static void takeItem(Inventory inv, Material id) {
        for (ItemStack isk : inv) {
            if (isk == null) {
                continue;
            }
            if (isk.getType().name().equals(id.toString())) {
                inv.remove(isk);
            }
        }
    }
}
